草庐IT

c++ - Lua C++ 表迭代

全部标签

c++ - 了解 STL 中的迭代器

C++STL中的迭代器到底是什么?就我而言,我使用的是list,而且我不明白为什么你必须制作一个迭代器std::list::const_iteratoriElementLocator;通过取消引用运算符显示列表的内容:cout在将其分配给可能list.begin()之后.请解释迭代器到底是什么,以及为什么我必须取消引用或使用它。 最佳答案 STL中包含三个构建block:容器算法迭代器在概念层面上,容器保存数据。这本身并不是很有用,因为您想对数据做一些事情;您想要对其操作、操纵它、查询它、玩弄它。算法正是这样做的。但是算法不保存数据

php - 使用 SWIG 在 PHP 中迭代 std::map

我正在使用SWIG包装一个在PHP中返回std::map的函数。在PHP代码中,我需要遍历map的元素。ThwSWIG库通过std_map.i接口(interface)文件提供对std::map的支持,但仅包装了以下方法:clear()del($key)get($key)has_key($key)is_empty()set($key,$x)size()如何遍历map的元素?我是否需要使用某种包装器扩展std_map.i文件,以用于迭代器和begin()和end()? 最佳答案 正如@awoodland所说,您必须实现迭代器接口(in

c++ - Range-v3:使用 view_facade 提供 const 和非常量迭代器

我在使用view_facade(来自range-v3)创建提供常量和非常量访问的View时遇到问题。例如,我尝试修改view_facade测试(在test/view_facade.cpp中)以允许非const访问(默认情况下它只允许const访问):structMyRange:ranges::range_facade{private:friendstructranges::range_access;std::vectorints_;templatestructcursor{private:usingIt=typenamestd::conditional::const_iterator,

c++ - 在 C++ 中命名和使用迭代器的常规约定是什么?

我觉得我命名和使用迭代器的方式不专业。我的意思是我“觉得”我应该给它们起别的名字,但我总是根据“it_”前缀来命名它们,过了一会儿,在一个长函数中,名字开始看起来都很相似.此外,我总是想知道我是否正在以一种“奇怪”的方式做事,而我只是因为不知道更好而学会了这种方式。例如,如果我遍历一个map以显示它的所有键/值对,我会这样做:map::const_iteratorit=layout.begin();for(;it!=layout.end();++it){   coutfirstsecond我看到有些人称他们的迭代器为“iter”——我看到了其他的循环方式。有没有一种超越风格的惯例,只是

c++ - 迭代 std::set 如何返回排序结果

容器std::set(或std::map)是STL提供的一种数据结构。在几乎所有的编译器中,它都被实现为一个R&B树,保证了log(n)的插入、查找和删除时间。https://en.wikipedia.org/wiki/Red%E2%80%93black_tree在红黑树中,元素根据存储元素的“less”运算符进行排序。所以基本上如果一个根是N+1,N将在左子树上,而N+2将在右子树上,这个顺序将由less运算符决定。我的问题是在执行以下代码时:set::iteratorit;for(it=myset.begin();it!=myset.end();it++){cout元素按排序顺序返

c++ - 检查/修改迭代器 "constness"

我有两个半密切相关的问题。给定一个作为模板参数传递的STL迭代器类型:如何判断类型对应的是常量迭代器还是非常量迭代器?替代1.,如何强制(例如使用enable_if)此类型对应于非常量迭代器?如何从非常量迭代器获取迭代器的const-版本(反之亦然)?[注意:已在thispost中回答;毫不奇怪,你不能。]这个问题来自哪里:我写了一个小类来促进vector上的算术/关系/代数运算(vector我的意思是一维固定大小的数据,而不是STLvector)。我没有强加一个特定的数据容器,而是定义了一个接口(interface)并派生了几个可能的容器,这些容器基本上“包装”了各种存储数据的方式。

c++ - 使用映射迭代器编译错误

在我的头文件中,我包含了std::map并使用了适当的命名空间。我的成员之一是:mappT_Spam;在我的.cpp文件中,我尝试做一些我现在经常做的事情:for(map::iteratorit=pT_Spam.begin();it!=pT_Spam.end();it++){/*code*/}上面甚至在cplusplus.com上使用std::map的例子中提到过。尽管我在代码的其他部分做了几乎相同的操作而不会导致编译错误,但在这一行我从Cygwin收到以下错误:error:conversionfrom`std::_Rb_tree_const_iterator>'tonon-scala

c++ - 一种在一维数组(位图)内迭代矩形区域的算法

这是一个奇怪的问题,我很难为它写一个标题。我正在处理像素(更具体地说是位图),无法弄清楚实用地访问每个数组单元格的(简单)数学。我的Canvas是[n16x16]像素,n始终为1或更大。这是一张基本的n=2Canvas的照片:http://i.imgur.com/mabwQfJ.png我想让我的神奇算法做的是从0运行到495而不触及浅灰色区域,然后从16运行到512(实际上是单元格511,我的错)而不触及深灰色区域。因此,0到15,跳过16到31,然后是32到47,等等。对于n=3:http://i.imgur.com/TqJMWl6.png在这种情况下,0-735会跳过较浅的灰色区域

Python迭代器和生成器的实际应用场景

在Python中,迭代器(Iterators)和生成器(Generators)是两个关键的概念,为我们提供了强大的工具,用于处理各种数据序列。迭代器和生成器不仅使我们能够更有效地操作数据,还可以大大减少内存占用,尤其在处理大型数据集时表现突出。迭代器(Iterators)什么是迭代器?迭代器是一种特殊的对象,可以在数据序列上进行迭代。它可以让你逐个访问序列中的元素,而无需将整个序列加载到内存中。Python中的大多数数据结构都可以用作可迭代对象,例如列表、元组、字符串等。迭代器协议迭代器对象必须遵守以下两个方法:__iter__():返回迭代器自身。__next__():返回序列中的下一个元素

c++ - 从返回迭代器的 const 和非常量方法中删除代码重复

我正在考虑thisquestion关于const和非常量类方法。首选答案取自ScottMeyers的EffectiveC++,其中非常量方法是根据const方法实现的。进一步扩展,如果方法返回迭代器而不是引用,如何减少代码重复?修改链接问题中的示例:classX{std::vectorvecZ;public:std::vector::iteratorZ(size_tindex){//...}std::vector::const_iteratorZ(size_tindex)const{//...}};我无法根据const方法实现非常量方法,因为如果不使用distance()/advanc